package com.bjsxt.config.cors;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

/**
 * description:
 * 跨域配置类
 * TODO: 这里的跨域访问因为放出的是全部的路径, 这里及其的不安全, 所以后期这里也需要进行修改
 *
 * @author ALIENWARE <br />
 * @date 2021/9/6
 */
@Configuration
public class CorsConfig {
    /**
     * 配置跨域发请求配置对象
     *
     * @return CorsWebFilter 对象
     */
    @Bean
    public CorsWebFilter corsWebFilter() {
        // 添加 CORS 的配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //放行哪些原始域(请求方式)
        corsConfiguration.addAllowedMethod("*");
        //允许跨域访问的域
        corsConfiguration.addAllowedOrigin("*");
        //放行哪些原始域(头部信息)
        corsConfiguration.addAllowedHeader("*");
        //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
        // corsConfiguration.addExposedHeader("content-type");
        // 添加映射路径
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        // 全部路径都支持跨域访问
        configSource.registerCorsConfiguration("/**", corsConfiguration);
        // 返回对象
        return new CorsWebFilter(configSource);
    }
}
